<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>日期对象案例练习(date object case practice)</title>
  <!-- 
  JavaScript 的 Date 对象用于处理日期和时间。以下是对 Date 对象的基本操作的总结，包括创建、格式化、获取和设置日期等。
  1. 创建日期对象
  - 使用当前日期和时间：
    let currentDate = new Date();
    console.log(currentDate); // 输出当前日期和时间
  - 使用指定的日期和时间：
    let specificDate = new Date('2024-01-29T09:00:00');
    console.log(specificDate); // 输出指定的日期和时间
  - 使用时间戳：
    let dateFromTimestamp = new Date(1672531199000); // 时间戳（毫秒）
    console.log(dateFromTimestamp); // 输出对应的日期和时间

  2. 获取日期和时间信息
  - 获取年份、月份和日期：
    let date = new Date();
    console.log(date.getFullYear()); // 获取年份
    console.log(date.getMonth() + 1); // 获取月份（注意：月份从0开始）
    console.log(date.getDate()); // 获取日期
  - 获取小时、分钟和秒：
    console.log(date.getHours()); // 获取小时
    console.log(date.getMinutes()); // 获取分钟
    console.log(date.getSeconds()); // 获取秒

  3. 设置日期和时间
  - 设置年份、月份和日期：
    let dateToSet = new Date();
    dateToSet.setFullYear(2025); // 设置年份
    dateToSet.setMonth(11); // 设置月份（12月）
    dateToSet.setDate(25); // 设置日期
    console.log(dateToSet); // 输出设置后的日期
  - 设置小时、分钟和秒：
    dateToSet.setHours(15); // 设置小时
    dateToSet.setMinutes(30); // 设置分钟
    dateToSet.setSeconds(45); // 设置秒
    console.log(dateToSet); // 输出设置后的日期

  4. 日期格式化
  - 使用  `toLocaleDateString()`  方法：
    let formattedDate = date.toLocaleDateString('zh-CN'); // 格式化为中文日期
    console.log(formattedDate); // 输出格式化后的日期
  - 使用  `toLocaleTimeString()`  方法：
    let formattedTime = date.toLocaleTimeString('zh-CN'); // 格式化为中文时间
    console.log(formattedTime); // 输出格式化后的时间
  - 使用  `toISOString()`  方法：
    let isoString = date.toISOString(); // 输出ISO格式的字符串
    console.log(isoString); // 输出ISO格式的日期时间

  5. 日期计算
  - 计算两个日期之间的差异：
    let startDate = new Date('2024-01-01');
    let endDate = new Date('2024-01-29');
    let timeDiff = endDate - startDate; // 计算时间差（毫秒）
    let daysDiff = timeDiff / (1000 * 3600 * 24); // 将毫秒转换为天数
    console.log(daysDiff); // 输出相差的天数

  总结
  - 日期对象创建：可以使用当前时间、指定时间或时间戳创建 Date 对象。
  - 获取信息：使用  `getFullYear()` 、 `getMonth()` 、 `getDate()`  等方法获取日期和时间信息。
  - 设置信息：使用  `setFullYear()` 、 `setMonth()` 、 `setDate()`  等方法设置日期和时间。
  - 格式化日期：使用  `toLocaleDateString()` 、 `toLocaleTimeString()`  和  `toISOString()`  方法进行日期格式化。
  - 日期计算：可以通过简单的算术运算计算两个日期之间的差异。

   -->
</head>
<body>

  <script>
    // 1. 获取想要的时间格式
    // 1.1 获取当前时间
    const date = new Date();

    const year = date.getFullYear(); // 获取年份
    const month = date.getMonth() + 1; // 获取月份（0-11，所以需要加1）
    const day = date.getDate(); // 获取日期
    const hour = date.getHours(); // 获取小时
    const minute = date.getMinutes(); // 获取分钟
    const second = date.getSeconds(); // 获取秒数

    // 1.2 格式化日期
    const formattedDate = `${year}-${month}-${day} ${hour}:${minute}:${second}`;
    console.log("格式化日期", formattedDate); // 输出格式化后的日期
    
    // 2. 获取指定时间
    const specifiedDate = new Date('2024-01-29');
    console.log("指定时间", specifiedDate.toLocaleDateString()); // 输出指定时间

    // 3. 计算两个日期之间的天数差
    const startDate = new Date('2023-12-01');
    const endDate = new Date('2024-01-29');
    const timeDiff = endDate - startDate; // 时间差，单位为毫秒
    const daysDiff = timeDiff / (1000 * 60 * 60 * 24); // 转换为天数
    console.log("天数差", daysDiff); // 输出天数差

    // 4. 获取当前时间戳
    // 4.1 获取当前时间戳1
    const timestamp = Date.now();
    console.log("时间戳1", timestamp); // 输出时间戳
    // 4.2 获取当前时间戳2
    const timestamp2 = new Date().getTime();
    console.log("时间戳2", timestamp2); // 输出时间戳
    // 4.3 获取当前时间戳3
    const timestamp3 = +new Date();
    console.log("时间戳3", timestamp3); // 输出时间戳
    // 4.4 获取当前时间戳4
    const timestamp4 = new Date().valueOf();
    console.log("时间戳4", timestamp4); // 输出时间戳

    // 5. 将时间戳转换为日期对象
    const timestamp5 = 1704124800000; // 时间戳
    const dateFromTimestamp = new Date(timestamp5);
    console.log("时间戳转换为日期对象", dateFromTimestamp.toLocaleDateString()); // 输出日期对象

    // 6. 将日期对象转换为时间戳
    const timestamp6 = date.getTime();
    console.log("日期对象转换为时间戳", timestamp6); // 输出时间戳

    // 7. 获取一周中的第几天
    const date7 = new Date('2023-12-01');
    const dayOfWeek = date7.getDay(); // 获取一周中的第几天，0表示周日，1表示周一，以此类推
    console.log("一周中的第几天", dayOfWeek); // 输出一周中的第几天

    // 8. 获取一个月中的第几天
    const date8 = new Date('2023-12-01');
    const dayOfMonth = date8.getDate(); // 获取一个月中的第几天
    console.log("一个月中的第几天", dayOfMonth); // 输出一个月中的第几天

    // 9. 获取一年中的第几天
    const date9 = new Date('2023-12-01');
    const dayOfYear = Math.floor((date9 - new Date(date9.getFullYear(), 0, 0)) / (1000 * 60 * 60 * 24)); // 获取一年中的第几天
    console.log("一年中的第几天", dayOfYear); // 输出一年中的第几天

    // 10. 设置date时间
    // 10.1 setFullYear
    date.setFullYear(2023);
    console.log("设置年份", date.getFullYear()); // 输出年份

    // 10.2 setMonth
    date.setMonth(11); // 设置月份，0表示一月，11表示十二月
    console.log("设置月份", date.getMonth()); // 输出月份

    // 10.3 setDate
    date.setDate(31); // 设置日期，1表示1号，31表示31号
    console.log("设置日期", date.getDate()); // 输出日期

    // 10.4 setHours
    date.setHours(23); // 设置小时，0表示0点，23表示23点
    console.log("设置小时", date.getHours()); // 输出小时

    // 10.5 setMinutes
    date.setMinutes(59); // 设置分钟，0表示0分，59表示59分
    console.log("设置分钟", date.getMinutes()); // 输出分钟

    // 10.6 setSeconds
    date.setSeconds(59); // 设置秒，0表示0秒，59表示59秒
    console.log("设置秒", date.getSeconds()); // 输出秒

    // 10.7 setMilliseconds
    date.setMilliseconds(999); // 设置毫秒，0表示0毫秒，999表示999毫秒
    console.log("设置毫秒", date.getMilliseconds()); // 输出毫秒

    // 11. 计算这个操作所花费的时间
    // 11.1 获取当前时间戳
    let start = Date.now();
    for (let i = 0; i < 10; i++) {
      console.log("计算这个操作所花费的时间", i);
    }
    let end = Date.now();
    console.log("计算这个操作所花费的时间结果", end - start);

    // 11.2 封装成一个函数
    function testPerfrmace(fn) {
      let start = Date.now();
      fn();
      let end = Date.now();
      console.log("计算这个操作所花费的时间结果", end - start);
    }
    testPerfrmace(function () {
      for (let i = 0; i < 10; i++) {
        console.log("计算这个操作所花费的时间", i);
      }
    })

    // 12. 字符串转时间戳
    let str = "2023-10-11 12:00:00";
    // 12.1 先将字符串转成时间对象, 再将时间对象转成时间戳
    let dateStr = new Date(str);
    let timestamp7 = dateStr.getTime();
    console.log("字符串转时间戳", timestamp7);
    
    // 12.2 使用时间对象的parse方法
    let timestamp8 = Date.parse(str);
    console.log("字符串转时间戳", timestamp8);
    
  </script>
  
</body>
</html>